// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Container Engine API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/container-engine/'>Google Container Engine API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20161024 (662)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/container-engine/'>
 *              https://cloud.google.com/container-engine/</a>
 *      <tr><th>Discovery Name<td>container
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Container Engine API can be found at
 * <a href='https://cloud.google.com/container-engine/'>https://cloud.google.com/container-engine/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Container.v1
{
    /// <summary>The Container Service.</summary>
    public class ContainerService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ContainerService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ContainerService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            projects = new ProjectsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "container"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://container.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Container Engine API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

        }



        private readonly ProjectsResource projects;

        /// <summary>Gets the Projects resource.</summary>
        public virtual ProjectsResource Projects
        {
            get { return projects; }
        }
    }

    ///<summary>A base abstract class for Container requests.</summary>
    public abstract class ContainerBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new ContainerBaseServiceRequest instance.</summary>
        protected ContainerBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Xgafv { get; set; }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Alt { get; set; }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes Container parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "projects" collection of methods.</summary>
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            zones = new ZonesResource(service);

        }

        private readonly ZonesResource zones;

        /// <summary>Gets the Zones resource.</summary>
        public virtual ZonesResource Zones
        {
            get { return zones; }
        }

        /// <summary>The "zones" collection of methods.</summary>
        public class ZonesResource
        {
            private const string Resource = "zones";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ZonesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                clusters = new ClustersResource(service);
                operations = new OperationsResource(service);

            }

            private readonly ClustersResource clusters;

            /// <summary>Gets the Clusters resource.</summary>
            public virtual ClustersResource Clusters
            {
                get { return clusters; }
            }

            /// <summary>The "clusters" collection of methods.</summary>
            public class ClustersResource
            {
                private const string Resource = "clusters";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public ClustersResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;
                    nodePools = new NodePoolsResource(service);

                }

                private readonly NodePoolsResource nodePools;

                /// <summary>Gets the NodePools resource.</summary>
                public virtual NodePoolsResource NodePools
                {
                    get { return nodePools; }
                }

                /// <summary>The "nodePools" collection of methods.</summary>
                public class NodePoolsResource
                {
                    private const string Resource = "nodePools";

                    /// <summary>The service which this resource belongs to.</summary>
                    private readonly Google.Apis.Services.IClientService service;

                    /// <summary>Constructs a new resource.</summary>
                    public NodePoolsResource(Google.Apis.Services.IClientService service)
                    {
                        this.service = service;

                    }


                    /// <summary>Creates a node pool for a cluster.</summary>
                    /// <param name="body">The body of the request.</param>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://developers.google.com/console/help/new/#projectnumber).</param>
                    /// <param name="zone">The name
                    /// of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    ///
                    /// <param name="clusterId">The name of the cluster.</param>
                    public virtual CreateRequest Create(Google.Apis.Container.v1.Data.CreateNodePoolRequest body, string projectId, string zone, string clusterId)
                    {
                        return new CreateRequest(service, body, projectId, zone, clusterId);
                    }

                    /// <summary>Creates a node pool for a cluster.</summary>
                    public class CreateRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                    {
                        /// <summary>Constructs a new Create request.</summary>
                        public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.CreateNodePoolRequest body, string projectId, string zone, string clusterId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            Body = body;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://developers.google.com/console/help/new/#projectnumber).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }


                        /// <summary>Gets or sets the body of this request.</summary>
                        Google.Apis.Container.v1.Data.CreateNodePoolRequest Body { get; set; }

                        ///<summary>Returns the body of the request.</summary>
                        protected override object GetBody() { return Body; }

                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "create"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "POST"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools"; }
                        }

                        /// <summary>Initializes Create parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Deletes a node pool from a cluster.</summary>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://developers.google.com/console/help/new/#projectnumber).</param>
                    /// <param name="zone">The name
                    /// of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    ///
                    /// <param name="clusterId">The name of the cluster.</param>
                    /// <param name="nodePoolId">The name of the node pool
                    /// to delete.</param>
                    public virtual DeleteRequest Delete(string projectId, string zone, string clusterId, string nodePoolId)
                    {
                        return new DeleteRequest(service, projectId, zone, clusterId, nodePoolId);
                    }

                    /// <summary>Deletes a node pool from a cluster.</summary>
                    public class DeleteRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                    {
                        /// <summary>Constructs a new Delete request.</summary>
                        public DeleteRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string clusterId, string nodePoolId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            NodePoolId = nodePoolId;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://developers.google.com/console/help/new/#projectnumber).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }

                        /// <summary>The name of the node pool to delete.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("nodePoolId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string NodePoolId { get; private set; }


                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "delete"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "DELETE"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}"; }
                        }

                        /// <summary>Initializes Delete parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "nodePoolId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "nodePoolId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Retrieves the node pool requested.</summary>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://developers.google.com/console/help/new/#projectnumber).</param>
                    /// <param name="zone">The name
                    /// of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    ///
                    /// <param name="clusterId">The name of the cluster.</param>
                    /// <param name="nodePoolId">The name of the node
                    /// pool.</param>
                    public virtual GetRequest Get(string projectId, string zone, string clusterId, string nodePoolId)
                    {
                        return new GetRequest(service, projectId, zone, clusterId, nodePoolId);
                    }

                    /// <summary>Retrieves the node pool requested.</summary>
                    public class GetRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.NodePool>
                    {
                        /// <summary>Constructs a new Get request.</summary>
                        public GetRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string clusterId, string nodePoolId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            NodePoolId = nodePoolId;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://developers.google.com/console/help/new/#projectnumber).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }

                        /// <summary>The name of the node pool.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("nodePoolId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string NodePoolId { get; private set; }


                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "get"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "GET"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}"; }
                        }

                        /// <summary>Initializes Get parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "nodePoolId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "nodePoolId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Lists the node pools for a cluster.</summary>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://developers.google.com/console/help/new/#projectnumber).</param>
                    /// <param name="zone">The name
                    /// of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    ///
                    /// <param name="clusterId">The name of the cluster.</param>
                    public virtual ListRequest List(string projectId, string zone, string clusterId)
                    {
                        return new ListRequest(service, projectId, zone, clusterId);
                    }

                    /// <summary>Lists the node pools for a cluster.</summary>
                    public class ListRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.ListNodePoolsResponse>
                    {
                        /// <summary>Constructs a new List request.</summary>
                        public ListRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string clusterId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://developers.google.com/console/help/new/#projectnumber).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }


                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "list"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "GET"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools"; }
                        }

                        /// <summary>Initializes List parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Roll back the previously Aborted or Failed NodePool upgrade. This will be an no-op if
                    /// the last upgrade successfully completed.</summary>
                    /// <param name="body">The body of the request.</param>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</param>
                    /// <param name="zone">The name of the Google
                    /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    /// <param
                    /// name="clusterId">The name of the cluster to rollback.</param>
                    /// <param name="nodePoolId">The name of the node
                    /// pool to rollback.</param>
                    public virtual RollbackRequest Rollback(Google.Apis.Container.v1.Data.RollbackNodePoolUpgradeRequest body, string projectId, string zone, string clusterId, string nodePoolId)
                    {
                        return new RollbackRequest(service, body, projectId, zone, clusterId, nodePoolId);
                    }

                    /// <summary>Roll back the previously Aborted or Failed NodePool upgrade. This will be an no-op if
                    /// the last upgrade successfully completed.</summary>
                    public class RollbackRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                    {
                        /// <summary>Constructs a new Rollback request.</summary>
                        public RollbackRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.RollbackNodePoolUpgradeRequest body, string projectId, string zone, string clusterId, string nodePoolId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            NodePoolId = nodePoolId;
                            Body = body;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://support.google.com/cloud/answer/6158840).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster to rollback.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }

                        /// <summary>The name of the node pool to rollback.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("nodePoolId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string NodePoolId { get; private set; }


                        /// <summary>Gets or sets the body of this request.</summary>
                        Google.Apis.Container.v1.Data.RollbackNodePoolUpgradeRequest Body { get; set; }

                        ///<summary>Returns the body of the request.</summary>
                        protected override object GetBody() { return Body; }

                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "rollback"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "POST"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}:rollback"; }
                        }

                        /// <summary>Initializes Rollback parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "nodePoolId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "nodePoolId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Sets the NodeManagement options for a node pool.</summary>
                    /// <param name="body">The body of the request.</param>
                    /// <param name="projectId">The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</param>
                    /// <param name="zone">The name of the Google
                    /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                    /// <param
                    /// name="clusterId">The name of the cluster to update.</param>
                    /// <param name="nodePoolId">The name of the node
                    /// pool to update.</param>
                    public virtual SetManagementRequest SetManagement(Google.Apis.Container.v1.Data.SetNodePoolManagementRequest body, string projectId, string zone, string clusterId, string nodePoolId)
                    {
                        return new SetManagementRequest(service, body, projectId, zone, clusterId, nodePoolId);
                    }

                    /// <summary>Sets the NodeManagement options for a node pool.</summary>
                    public class SetManagementRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                    {
                        /// <summary>Constructs a new SetManagement request.</summary>
                        public SetManagementRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.SetNodePoolManagementRequest body, string projectId, string zone, string clusterId, string nodePoolId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Zone = zone;
                            ClusterId = clusterId;
                            NodePoolId = nodePoolId;
                            Body = body;
                            InitParameters();
                        }


                        /// <summary>The Google Developers Console [project ID or project
                        /// number](https://support.google.com/cloud/answer/6158840).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in
                        /// which the cluster resides.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Zone { get; private set; }

                        /// <summary>The name of the cluster to update.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ClusterId { get; private set; }

                        /// <summary>The name of the node pool to update.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("nodePoolId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string NodePoolId { get; private set; }


                        /// <summary>Gets or sets the body of this request.</summary>
                        Google.Apis.Container.v1.Data.SetNodePoolManagementRequest Body { get; set; }

                        ///<summary>Returns the body of the request.</summary>
                        protected override object GetBody() { return Body; }

                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "setManagement"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "POST"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}/setManagement"; }
                        }

                        /// <summary>Initializes SetManagement parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "zone", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "zone",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "clusterId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "clusterId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "nodePoolId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "nodePoolId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }
                }

                /// <summary>Creates a cluster, consisting of the specified number and type of Google Compute Engine
                /// instances. By default, the cluster is created in the project's [default network](/compute/docs
                /// /networks-and-firewalls#networks). One firewall is added for the cluster. After cluster creation,
                /// the cluster creates routes for each node to allow the containers on that node to communicate with
                /// all other instances in the cluster. Finally, an entry is added to the project's global metadata
                /// indicating which CIDR range is being used by the cluster.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                public virtual CreateRequest Create(Google.Apis.Container.v1.Data.CreateClusterRequest body, string projectId, string zone)
                {
                    return new CreateRequest(service, body, projectId, zone);
                }

                /// <summary>Creates a cluster, consisting of the specified number and type of Google Compute Engine
                /// instances. By default, the cluster is created in the project's [default network](/compute/docs
                /// /networks-and-firewalls#networks). One firewall is added for the cluster. After cluster creation,
                /// the cluster creates routes for each node to allow the containers on that node to communicate with
                /// all other instances in the cluster. Finally, an entry is added to the project's global metadata
                /// indicating which CIDR range is being used by the cluster.</summary>
                public class CreateRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                {
                    /// <summary>Constructs a new Create request.</summary>
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.CreateClusterRequest body, string projectId, string zone)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Container.v1.Data.CreateClusterRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "create"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/clusters"; }
                    }

                    /// <summary>Initializes Create parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and
                /// routes that were configured during cluster creation are also deleted. Other Google Compute Engine
                /// resources that might be in use by the cluster (e.g. load balancer resources) will not be deleted if
                /// they weren't present at the initial create time.</summary>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                /// <param
                /// name="clusterId">The name of the cluster to delete.</param>
                public virtual DeleteRequest Delete(string projectId, string zone, string clusterId)
                {
                    return new DeleteRequest(service, projectId, zone, clusterId);
                }

                /// <summary>Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and
                /// routes that were configured during cluster creation are also deleted. Other Google Compute Engine
                /// resources that might be in use by the cluster (e.g. load balancer resources) will not be deleted if
                /// they weren't present at the initial create time.</summary>
                public class DeleteRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                {
                    /// <summary>Constructs a new Delete request.</summary>
                    public DeleteRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string clusterId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        ClusterId = clusterId;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }

                    /// <summary>The name of the cluster to delete.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ClusterId { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "delete"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "DELETE"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}"; }
                    }

                    /// <summary>Initializes Delete parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "clusterId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "clusterId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Gets the details of a specific cluster.</summary>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                /// <param
                /// name="clusterId">The name of the cluster to retrieve.</param>
                public virtual GetRequest Get(string projectId, string zone, string clusterId)
                {
                    return new GetRequest(service, projectId, zone, clusterId);
                }

                /// <summary>Gets the details of a specific cluster.</summary>
                public class GetRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Cluster>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string clusterId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        ClusterId = clusterId;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }

                    /// <summary>The name of the cluster to retrieve.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ClusterId { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "clusterId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "clusterId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Lists all clusters owned by a project in either the specified zone or all zones.</summary>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides, or "-" for all
                /// zones.</param>
                public virtual ListRequest List(string projectId, string zone)
                {
                    return new ListRequest(service, projectId, zone);
                }

                /// <summary>Lists all clusters owned by a project in either the specified zone or all zones.</summary>
                public class ListRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.ListClustersResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string projectId, string zone)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides, or "-" for all zones.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/clusters"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Updates the settings of a specific cluster.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                /// <param
                /// name="clusterId">The name of the cluster to upgrade.</param>
                public virtual UpdateRequest Update(Google.Apis.Container.v1.Data.UpdateClusterRequest body, string projectId, string zone, string clusterId)
                {
                    return new UpdateRequest(service, body, projectId, zone, clusterId);
                }

                /// <summary>Updates the settings of a specific cluster.</summary>
                public class UpdateRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                {
                    /// <summary>Constructs a new Update request.</summary>
                    public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.UpdateClusterRequest body, string projectId, string zone, string clusterId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        ClusterId = clusterId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }

                    /// <summary>The name of the cluster to upgrade.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("clusterId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ClusterId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Container.v1.Data.UpdateClusterRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "update"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "PUT"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}"; }
                    }

                    /// <summary>Initializes Update parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "clusterId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "clusterId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
            private readonly OperationsResource operations;

            /// <summary>Gets the Operations resource.</summary>
            public virtual OperationsResource Operations
            {
                get { return operations; }
            }

            /// <summary>The "operations" collection of methods.</summary>
            public class OperationsResource
            {
                private const string Resource = "operations";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public OperationsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Cancels the specified operation.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the operation resides.</param>
                /// <param
                /// name="operationId">The server-assigned `name` of the operation.</param>
                public virtual CancelRequest Cancel(Google.Apis.Container.v1.Data.CancelOperationRequest body, string projectId, string zone, string operationId)
                {
                    return new CancelRequest(service, body, projectId, zone, operationId);
                }

                /// <summary>Cancels the specified operation.</summary>
                public class CancelRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Empty>
                {
                    /// <summary>Constructs a new Cancel request.</summary>
                    public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.Container.v1.Data.CancelOperationRequest body, string projectId, string zone, string operationId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        OperationId = operationId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the operation resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }

                    /// <summary>The server-assigned `name` of the operation.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("operationId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string OperationId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Container.v1.Data.CancelOperationRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "cancel"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/operations/{operationId}:cancel"; }
                    }

                    /// <summary>Initializes Cancel parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "operationId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "operationId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Gets the specified operation.</summary>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.</param>
                /// <param
                /// name="operationId">The server-assigned `name` of the operation.</param>
                public virtual GetRequest Get(string projectId, string zone, string operationId)
                {
                    return new GetRequest(service, projectId, zone, operationId);
                }

                /// <summary>Gets the specified operation.</summary>
                public class GetRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.Operation>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string projectId, string zone, string operationId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        OperationId = operationId;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
                    /// the cluster resides.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }

                    /// <summary>The server-assigned `name` of the operation.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("operationId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string OperationId { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/operations/{operationId}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "operationId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "operationId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Lists all operations in a project in a specific zone or all zones.</summary>
                /// <param name="projectId">The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</param>
                /// <param name="zone">The name of the Google
                /// Compute Engine [zone](/compute/docs/zones#available) to return operations for, or `-` for all zones.</param>
                public virtual ListRequest List(string projectId, string zone)
                {
                    return new ListRequest(service, projectId, zone);
                }

                /// <summary>Lists all operations in a project in a specific zone or all zones.</summary>
                public class ListRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.ListOperationsResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string projectId, string zone)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Zone = zone;
                        InitParameters();
                    }


                    /// <summary>The Google Developers Console [project ID or project
                    /// number](https://support.google.com/cloud/answer/6158840).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return
                    /// operations for, or `-` for all zones.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Zone { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1/projects/{projectId}/zones/{zone}/operations"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "zone", new Google.Apis.Discovery.Parameter
                            {
                                Name = "zone",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }

            /// <summary>Returns configuration info about the Container Engine service.</summary>
            /// <param name="projectId">The Google Developers Console [project ID or project
            /// number](https://support.google.com/cloud/answer/6158840).</param>
            /// <param name="zone">The name of the Google
            /// Compute Engine [zone](/compute/docs/zones#available) to return operations for.</param>
            public virtual GetServerconfigRequest GetServerconfig(string projectId, string zone)
            {
                return new GetServerconfigRequest(service, projectId, zone);
            }

            /// <summary>Returns configuration info about the Container Engine service.</summary>
            public class GetServerconfigRequest : ContainerBaseServiceRequest<Google.Apis.Container.v1.Data.ServerConfig>
            {
                /// <summary>Constructs a new GetServerconfig request.</summary>
                public GetServerconfigRequest(Google.Apis.Services.IClientService service, string projectId, string zone)
                    : base(service)
                {
                    ProjectId = projectId;
                    Zone = zone;
                    InitParameters();
                }


                /// <summary>The Google Developers Console [project ID or project
                /// number](https://support.google.com/cloud/answer/6158840).</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return
                /// operations for.</summary>
                [Google.Apis.Util.RequestParameterAttribute("zone", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Zone { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "getServerconfig"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/projects/{projectId}/zones/{zone}/serverconfig"; }
                }

                /// <summary>Initializes GetServerconfig parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "zone", new Google.Apis.Discovery.Parameter
                        {
                            Name = "zone",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
    }
}

namespace Google.Apis.Container.v1.Data
{    

    /// <summary>Configuration for the addons that can be automatically spun up in the cluster, enabling additional
    /// functionality.</summary>
    public class AddonsConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configuration for the horizontal pod autoscaling feature, which increases or decreases the number
        /// of replica pods a replication controller has based on the resource usage of the existing pods.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("horizontalPodAutoscaling")]
        public virtual HorizontalPodAutoscaling HorizontalPodAutoscaling { get; set; } 

        /// <summary>Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP
        /// load balancers for services in a cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpLoadBalancing")]
        public virtual HttpLoadBalancing HttpLoadBalancing { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>AutoUpgradeOptions defines the set of options for the user to control how the Auto Upgrades will
    /// proceed.</summary>
    public class AutoUpgradeOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output only] This field is set when upgrades are about to commence with the approximate start time
        /// for the upgrades, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoUpgradeStartTime")]
        public virtual string AutoUpgradeStartTime { get; set; } 

        /// <summary>[Output only] This field is set when upgrades are about to commence with the description of the
        /// upgrade.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>CancelOperationRequest cancels a single operation.</summary>
    public class CancelOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Google Container Engine cluster.</summary>
    public class Cluster : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configurations for the various addons available to run in the cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addonsConfig")]
        public virtual AddonsConfig AddonsConfig { get; set; } 

        /// <summary>The IP address range of the container pods in this cluster, in [CIDR](http://en.wikipedia.org/wiki
        /// /Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically
        /// chosen or specify a `/14` block in `10.0.0.0/8`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clusterIpv4Cidr")]
        public virtual string ClusterIpv4Cidr { get; set; } 

        /// <summary>[Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt)
        /// text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual string CreateTime { get; set; } 

        /// <summary>[Output only] The current software version of the master endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentMasterVersion")]
        public virtual string CurrentMasterVersion { get; set; } 

        /// <summary>[Output only] The number of nodes currently in the cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentNodeCount")]
        public virtual System.Nullable<int> CurrentNodeCount { get; set; } 

        /// <summary>[Output only] The current version of the node software components. If they are currently at
        /// multiple versions because they're in the process of being upgraded, this reflects the minimum version of all
        /// nodes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentNodeVersion")]
        public virtual string CurrentNodeVersion { get; set; } 

        /// <summary>An optional description of this cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Kubernetes alpha features are enabled on this cluster. This includes alpha API groups (e.g.
        /// v1alpha1) and features that may not be production ready in the kubernetes version of the master and nodes.
        /// The cluster has no SLA for uptime and master/node upgrades are disabled. Alpha enabled clusters are
        /// automatically deleted thirty days after creation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enableKubernetesAlpha")]
        public virtual System.Nullable<bool> EnableKubernetesAlpha { get; set; } 

        /// <summary>[Output only] The IP address of this cluster's master endpoint. The endpoint can be accessed from
        /// the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for
        /// username and password information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endpoint")]
        public virtual string Endpoint { get; set; } 

        /// <summary>[Output only] The time the cluster will be automatically deleted in
        /// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expireTime")]
        public virtual string ExpireTime { get; set; } 

        /// <summary>[Output only] The software version of the master endpoint and kubelets used in the cluster when it
        /// was first created. The version can be upgraded over time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialClusterVersion")]
        public virtual string InitialClusterVersion { get; set; } 

        /// <summary>The number of nodes to create in this cluster. You must ensure that your Compute Engine resource
        /// quota is sufficient for this number of instances. You must also have available firewall and routes quota.
        /// For requests, this field should only be used in lieu of a "node_pool" object, since this configuration
        /// (along with the "node_config") will be used to create a "NodePool" object with an auto-generated name. Do
        /// not use this and a node_pool at the same time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialNodeCount")]
        public virtual System.Nullable<int> InitialNodeCount { get; set; } 

        /// <summary>[Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated
        /// with this cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instanceGroupUrls")]
        public virtual System.Collections.Generic.IList<string> InstanceGroupUrls { get; set; } 

        /// <summary>The list of Google Compute Engine [locations](/compute/docs/zones#available) in which the cluster's
        /// nodes should be located.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locations")]
        public virtual System.Collections.Generic.IList<string> Locations { get; set; } 

        /// <summary>The logging service the cluster should use to write logs. Currently available options: *
        /// `logging.googleapis.com` - the Google Cloud Logging service. * `none` - no logs will be exported from the
        /// cluster. * if left as an empty string,`logging.googleapis.com` will be used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("loggingService")]
        public virtual string LoggingService { get; set; } 

        /// <summary>The authentication information for accessing the master endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("masterAuth")]
        public virtual MasterAuth MasterAuth { get; set; } 

        /// <summary>The monitoring service the cluster should use to write metrics. Currently available options: *
        /// `monitoring.googleapis.com` - the Google Cloud Monitoring service. * `none` - no metrics will be exported
        /// from the cluster. * if left as an empty string, `monitoring.googleapis.com` will be used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("monitoringService")]
        public virtual string MonitoringService { get; set; } 

        /// <summary>The name of this cluster. The name must be unique within this project and zone, and can be up to 40
        /// characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start
        /// with a letter. * Must end with a number or a letter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to
        /// which the cluster is connected. If left unspecified, the `default` network will be used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("network")]
        public virtual string Network { get; set; } 

        /// <summary>Parameters used in creating the cluster's nodes. See `nodeConfig` for the description of its
        /// properties. For requests, this field should only be used in lieu of a "node_pool" object, since this
        /// configuration (along with the "initial_node_count") will be used to create a "NodePool" object with an auto-
        /// generated name. Do not use this and a node_pool at the same time. For responses, this field will be
        /// populated with the node configuration of the first node pool. If unspecified, the defaults are
        /// used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodeConfig")]
        public virtual NodeConfig NodeConfig { get; set; } 

        /// <summary>[Output only] The size of the address space on each node for hosting containers. This is
        /// provisioned from within the `container_ipv4_cidr` range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodeIpv4CidrSize")]
        public virtual System.Nullable<int> NodeIpv4CidrSize { get; set; } 

        /// <summary>The node pools associated with this cluster. This field should not be set if "node_config" or
        /// "initial_node_count" are specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodePools")]
        public virtual System.Collections.Generic.IList<NodePool> NodePools { get; set; } 

        /// <summary>[Output only] Server-defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Output only] The IP address range of the Kubernetes services in this cluster, in
        /// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service
        /// addresses are typically put in the last `/16` from the container CIDR.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servicesIpv4Cidr")]
        public virtual string ServicesIpv4Cidr { get; set; } 

        /// <summary>[Output only] The current status of this cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>[Output only] Additional information about the current status of this cluster, if
        /// available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>The name of the Google Compute Engine [subnetwork](/compute/docs/subnetworks) to which the cluster
        /// is connected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subnetwork")]
        public virtual string Subnetwork { get; set; } 

        /// <summary>[Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which
        /// the cluster resides.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>ClusterUpdate describes an update to the cluster. Exactly one update can be applied to a cluster with
    /// each request, so at most one field can be provided.</summary>
    public class ClusterUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Configurations for the various addons available to run in the cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredAddonsConfig")]
        public virtual AddonsConfig DesiredAddonsConfig { get; set; } 

        /// <summary>The desired image type for the node pool. NOTE: Set the "desired_node_pool" field as
        /// well.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredImageType")]
        public virtual string DesiredImageType { get; set; } 

        /// <summary>The desired list of Google Compute Engine [locations](/compute/docs/zones#available) in which the
        /// cluster's nodes should be located. Changing the locations a cluster is in will result in nodes being either
        /// created or removed from the cluster, depending on whether locations are being added or removed. This list
        /// must always include the cluster's primary zone.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredLocations")]
        public virtual System.Collections.Generic.IList<string> DesiredLocations { get; set; } 

        /// <summary>The Kubernetes version to change the master to. The only valid value is the latest supported
        /// version. Use "-" to have the server automatically select the latest version.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredMasterVersion")]
        public virtual string DesiredMasterVersion { get; set; } 

        /// <summary>The monitoring service the cluster should use to write metrics. Currently available options: *
        /// "monitoring.googleapis.com" - the Google Cloud Monitoring service * "none" - no metrics will be exported
        /// from the cluster</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredMonitoringService")]
        public virtual string DesiredMonitoringService { get; set; } 

        /// <summary>Autoscaler configuration for the node pool specified in desired_node_pool_id. If there is only one
        /// pool in the cluster and desired_node_pool_id is not provided then the change applies to that single node
        /// pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredNodePoolAutoscaling")]
        public virtual NodePoolAutoscaling DesiredNodePoolAutoscaling { get; set; } 

        /// <summary>The node pool to be upgraded. This field is mandatory if "desired_node_version",
        /// "desired_image_family" or "desired_node_pool_autoscaling" is specified and there is more than one node pool
        /// on the cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredNodePoolId")]
        public virtual string DesiredNodePoolId { get; set; } 

        /// <summary>The Kubernetes version to change the nodes to (typically an upgrade). Use `-` to upgrade to the
        /// latest version supported by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredNodeVersion")]
        public virtual string DesiredNodeVersion { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>CreateClusterRequest creates a cluster.</summary>
    public class CreateClusterRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A [cluster resource](/container-engine/reference/rest/v1/projects.zones.clusters)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cluster")]
        public virtual Cluster Cluster { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>CreateNodePoolRequest creates a node pool for a cluster.</summary>
    public class CreateNodePoolRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The node pool to create.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodePool")]
        public virtual NodePool NodePool { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance: service Foo {
    /// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty
    /// JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration options for the horizontal pod autoscaling feature, which increases or decreases the
    /// number of replica pods a replication controller has based on the resource usage of the existing pods.</summary>
    public class HorizontalPodAutoscaling : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures
        /// that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disabled")]
        public virtual System.Nullable<bool> Disabled { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration options for the HTTP (L7) load balancing controller addon, which makes it easy to set up
    /// HTTP load balancers for services in a cluster.</summary>
    public class HttpLoadBalancing : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small
        /// pod in the cluster that manages the load balancers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disabled")]
        public virtual System.Nullable<bool> Disabled { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>ListClustersResponse is the result of ListClustersRequest.</summary>
    public class ListClustersResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of clusters in the project in the specified zone, or across all ones.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clusters")]
        public virtual System.Collections.Generic.IList<Cluster> Clusters { get; set; } 

        /// <summary>If any zones are listed here, the list of clusters returned may be missing those zones.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("missingZones")]
        public virtual System.Collections.Generic.IList<string> MissingZones { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>ListNodePoolsResponse is the result of ListNodePoolsRequest.</summary>
    public class ListNodePoolsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of node pools for a cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodePools")]
        public virtual System.Collections.Generic.IList<NodePool> NodePools { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>ListOperationsResponse is the result of ListOperationsRequest.</summary>
    public class ListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If any zones are listed here, the list of operations returned may be missing the operations from
        /// those zones.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("missingZones")]
        public virtual System.Collections.Generic.IList<string> MissingZones { get; set; } 

        /// <summary>A list of operations in the project in the specified zone.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The authentication information for accessing the master endpoint. Authentication can be done using HTTP
    /// basic auth or using client certificates.</summary>
    public class MasterAuth : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>[Output only] Base64-encoded public certificate used by clients to authenticate to the cluster
        /// endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientCertificate")]
        public virtual string ClientCertificate { get; set; } 

        /// <summary>[Output only] Base64-encoded private key used by clients to authenticate to the cluster
        /// endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientKey")]
        public virtual string ClientKey { get; set; } 

        /// <summary>[Output only] Base64-encoded public certificate that is the root of trust for the
        /// cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clusterCaCertificate")]
        public virtual string ClusterCaCertificate { get; set; } 

        /// <summary>The password to use for HTTP basic authentication to the master endpoint. Because the master
        /// endpoint is open to the Internet, you should create a strong password.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("password")]
        public virtual string Password { get; set; } 

        /// <summary>The username to use for HTTP basic authentication to the master endpoint.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("username")]
        public virtual string Username { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Parameters that describe the nodes in a cluster.</summary>
    public class NodeConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If
        /// unspecified, the default disk size is 100GB.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskSizeGb")]
        public virtual System.Nullable<int> DiskSizeGb { get; set; } 

        /// <summary>The image type to use for this node. Note that for a given image type, the latest version of it
        /// will be used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageType")]
        public virtual string ImageType { get; set; } 

        /// <summary>The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in
        /// addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys,
        /// the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is
        /// undefined and conflicts should be avoided. For more information, including usage and the valid values, see:
        /// http://kubernetes.io/v1.1/docs/user-guide/labels.html</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string,string> Labels { get; set; } 

        /// <summary>The number of local SSD disks to be attached to the node. The limit for this value is dependant
        /// upon the maximum number of disks available on a machine per zone. See:
        /// https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits for more information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("localSsdCount")]
        public virtual System.Nullable<int> LocalSsdCount { get; set; } 

        /// <summary>The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g.
        /// `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("machineType")]
        public virtual string MachineType { get; set; } 

        /// <summary>The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp
        /// [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata
        /// server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the
        /// project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-
        /// data" Values are free-form strings, and only have meaning as interpreted by the image running in the
        /// instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB.
        /// The total size of all keys and values must be less than 512 KB.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,string> Metadata { get; set; } 

        /// <summary>The set of Google API scopes to be made available on all of the node VMs under the "default"
        /// service account. The following scopes are recommended, but not required, and by default are not included: *
        /// `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. *
        /// `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the
        /// [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud
        /// Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oauthScopes")]
        public virtual System.Collections.Generic.IList<string> OauthScopes { get; set; } 

        /// <summary>Whether the nodes are created as preemptible VM instances. See:
        /// https://cloud.google.com/compute/docs/instances/preemptible for more inforamtion about preemptible VM
        /// instances.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("preemptible")]
        public virtual System.Nullable<bool> Preemptible { get; set; } 

        /// <summary>The Google Cloud Platform Service Account to be used by the node VMs. If no Service Account is
        /// specified, the "default" service account is used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccount")]
        public virtual string ServiceAccount { get; set; } 

        /// <summary>The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets
        /// for network firewalls and are specified by the client during cluster or node pool creation. Each tag within
        /// the list must comply with RFC1035.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tags")]
        public virtual System.Collections.Generic.IList<string> Tags { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>NodeManagement defines the set of node management services turned on for the node pool.</summary>
    public class NodeManagement : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether the nodes will be automatically upgraded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoUpgrade")]
        public virtual System.Nullable<bool> AutoUpgrade { get; set; } 

        /// <summary>Specifies the Auto Upgrade knobs for the node pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("upgradeOptions")]
        public virtual AutoUpgradeOptions UpgradeOptions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes
    /// (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may
    /// have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They
    /// may also be resized up or down, to accommodate the workload.</summary>
    public class NodePool : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Autoscaler configuration for this NodePool. Autoscaler is enabled only if a valid configuration is
        /// present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoscaling")]
        public virtual NodePoolAutoscaling Autoscaling { get; set; } 

        /// <summary>The node configuration of the pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("config")]
        public virtual NodeConfig Config { get; set; } 

        /// <summary>The initial node count for the pool. You must ensure that your Compute Engine resource quota is
        /// sufficient for this number of instances. You must also have available firewall and routes quota.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialNodeCount")]
        public virtual System.Nullable<int> InitialNodeCount { get; set; } 

        /// <summary>[Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated
        /// with this node pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instanceGroupUrls")]
        public virtual System.Collections.Generic.IList<string> InstanceGroupUrls { get; set; } 

        /// <summary>NodeManagement configuration for this NodePool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("management")]
        public virtual NodeManagement Management { get; set; } 

        /// <summary>The name of the node pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>[Output only] Server-defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>[Output only] The status of the nodes in this pool instance.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>[Output only] Additional information about the current status of this node pool instance, if
        /// available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>[Output only] The version of the Kubernetes of this node.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>NodePoolAutoscaling contains information required by cluster autoscaler to adjust the size of the node
    /// pool to the current cluster usage.</summary>
    public class NodePoolAutoscaling : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Is autoscaling enabled for this node pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enabled")]
        public virtual System.Nullable<bool> Enabled { get; set; } 

        /// <summary>Maximum number of nodes in the NodePool. Must be >= min_node_count. There has to enough quota to
        /// scale up the cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxNodeCount")]
        public virtual System.Nullable<int> MaxNodeCount { get; set; } 

        /// <summary>Minimum number of nodes in the NodePool. Must be >= 1 and <= max_node_count.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minNodeCount")]
        public virtual System.Nullable<int> MinNodeCount { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This operation resource represents operations that may have happened or are happening on the cluster.
    /// All fields are output only.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Detailed operation progress, if available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; } 

        /// <summary>The server-assigned ID for the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The operation type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>Server-defined URL for the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The current status of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>If an error has occurred, a textual description of the error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statusMessage")]
        public virtual string StatusMessage { get; set; } 

        /// <summary>Server-defined URL for the target of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetLink")]
        public virtual string TargetLink { get; set; } 

        /// <summary>The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation
        /// is taking place.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed NodePool upgrade. This will
    /// be an no-op if the last upgrade successfully completed.</summary>
    public class RollbackNodePoolUpgradeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Container Engine service configuration.</summary>
    public class ServerConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Version of Kubernetes the service deploys by default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultClusterVersion")]
        public virtual string DefaultClusterVersion { get; set; } 

        /// <summary>Default image type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultImageType")]
        public virtual string DefaultImageType { get; set; } 

        /// <summary>List of valid image types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("validImageTypes")]
        public virtual System.Collections.Generic.IList<string> ValidImageTypes { get; set; } 

        /// <summary>List of valid master versions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("validMasterVersions")]
        public virtual System.Collections.Generic.IList<string> ValidMasterVersions { get; set; } 

        /// <summary>List of valid node upgrade target versions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("validNodeVersions")]
        public virtual System.Collections.Generic.IList<string> ValidNodeVersions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>SetNodePoolManagementRequest sets the node management properties of a node pool.</summary>
    public class SetNodePoolManagementRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>NodeManagement configuration for the node pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("management")]
        public virtual NodeManagement Management { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>UpdateClusterRequest updates the settings of a cluster.</summary>
    public class UpdateClusterRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A description of the update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("update")]
        public virtual ClusterUpdate Update { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
